package hao.bk.config;

import hao.bk.royalmap.RoyalMapActivity;
import hao.bk.sql.sqlutils.SQLiteHelper;
import hao.bk.utils.Constants;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.pm.PackageManager.NameNotFoundException;
import android.util.Log;
/**
 * Lấy thông tin config từ file config.properties
 * @author lucnd
 *
 */
public class Configuration {

	private static SharedPreferences prefDatabase;
	
	/**Tên database */
	public static String databaseName;
	
	/**Lưu trữ version database hiện tại*/
	public static int currentDBVersion;
	
	/**Lưu trữ version database của version trước mà mobile đã cài đặt*/
	private static int preDBVersion;
	
	/**Lưu trữ version db cho các bản ghi mặc định*/
	private static int recordDBVersion;
	
	public static void init(RoyalMapActivity main){
		
		prefDatabase = main.getApplicationContext().getSharedPreferences(Constants.PREFS_ROYAL_MAP, Context.MODE_PRIVATE);
		//đọc file config để tạo lại database mới
		readConfigFile(getProperties(main));
		
		boolean installed = prefDatabase.getBoolean(Constants.PREFS_INSTALLED_APP, false);
		
		if(!installed){
			
			SQLiteHelper sqLiteHelper = new SQLiteHelper(main);
			//Khởi tạo database
			sqLiteHelper.createDataBase();
			
			Editor editor = prefDatabase.edit();
			
			//cập nhật lại trạng thái cài đặt
			editor.putBoolean(Constants.PREFS_INSTALLED_APP, true);
			
			//cập nhật lại preDBVersion
			editor.putInt(Constants.PREFS_PRE_VERSION, currentDBVersion);
			
			//lưu trữ version của bản ghi trong database.
			editor.putInt(Constants.PREFS_RECORD_VERSION, recordDBVersion);
			
			//Lưu trữ version code
			editor.putInt(Constants.PREFS_CODE_VERSION, getCurrentCodeVersion(main));
			
			editor.commit();
			
		}else{
			
			preDBVersion = prefDatabase.getInt(Constants.PREFS_PRE_VERSION, 1);
			//cập nhận lại version của bản ghi dữ liệu
			if(currentDBVersion > preDBVersion){
				
				//cập nhật giá trị mặc định
				Editor editor = prefDatabase.edit();
				
				//thêm các cột cho bảng company trong database cho version db = 3
				if (currentDBVersion >= Constants.DB_VERSION_3 && preDBVersion != Constants.DB_VERSION_3) {
					//tạo database mới
					//xóa database cũ
					main.deleteDatabase(databaseName);
					SQLiteHelper sqLiteHelper = new SQLiteHelper(main);
					sqLiteHelper.createDataBase();
				}
				
				
				//cập nhật lại preDBVersion
				editor.putInt(Constants.PREFS_PRE_VERSION, currentDBVersion);
				
				//lưu trữ version của bản ghi trong database.
				editor.putInt(Constants.PREFS_RECORD_VERSION, recordDBVersion);
				
				//Lưu trữ version code hiện tại
				editor.putInt(Constants.PREFS_CODE_VERSION, getCurrentCodeVersion(main));
				
				editor.commit();
			}
		}
//		SQLiteHelper sqLiteHelper = new SQLiteHelper(main);
//		sqLiteHelper.exportDatabse();
	}
	
	/**
	 * Đọc dữ liệu từ config file rồi lưu trữ vào SharedPreferences
	 * @param main
	 */
	private static Properties getProperties(RoyalMapActivity main){
		Properties props=new Properties();
		try {
			InputStream inputStream  = main.getAssets().open(Constants.CONFIG_FILE);
			props.load(inputStream);
			
		} catch (IOException e) {
			Log.e(Constants.TAG, "Không thể load được file config:" + e.toString());
		}
		return props;
	}
	
	/**
	 * Đọc dữ liệu từ config file rồi lưu trữ vào SharedPreferences
	 * @param main
	 */
	private static void readConfigFile(Properties props){
		//đọc dữ liệu từ config file vào sharePreference
		try {
			
			//lấy tên database 
			databaseName = props.getProperty(Constants.PREFS_DATABASE_NAME);
			
			//lấy version database theo version code
			currentDBVersion = Integer.parseInt(props.getProperty(Constants.CURRENT_DB_VERSION));
			
			recordDBVersion = Integer.parseInt(props.getProperty(Constants.PREFS_RECORD_VERSION));
			
		} catch (Exception e) {
			Log.e(Constants.TAG, "Không thể load được file config:" + e.toString());
		}
	}
    
    /**
     * Lấy version code của ứng dụng
     * @return
     */
    public static int getCurrentCodeVersion(RoyalMapActivity main) {
    	int vercode = prefDatabase.getInt(Constants.PREFS_CODE_VERSION,3);
    	try {
    		vercode = main.getPackageManager().getPackageInfo(main.getPackageName(), 0).versionCode;
		} catch (NameNotFoundException e) {
			Log.e(Constants.TAG, "Không thể lấy được version:code :",e);
		}
        return vercode;
    }

}
